Java NIO Files 类
java.nio.file.Files
是 Java NIO (New I/O) 包中的一个实用工具类,位于
java.nio.file
包中。
java.nio.file.Files
提供了一系列静态方法来操作文件系统中的文件和目录,大大简化了文件 I/O 操作。
主要特点
- 静态方法 :所有方法都是静态的,无需创建实例
- 功能丰富 :提供文件读写、属性操作、目录遍历等多种功能
-
异常处理
:统一使用
IOException处理文件操作异常 -
与 Path 配合
:主要与
java.nio.file.Path接口一起使用
常用方法分类
注意: 许多方法会抛出 IOException,使用时需要进行异常处理。
以下是 java.nio.file.Files 类的常用方法:
1、文件操作
文件读写
示例代码
// 读取文件所有行List<String>lines=Files.readAllLines(path);// 写入文件Files.write(path, content.getBytes());// 追加写入Files.write(path, content.getBytes(), StandardOpenOption.APPEND);
文件复制/移动/删除
示例代码
// 复制文件Files.copy(sourcePath, targetPath);// 移动/重命名文件Files.move(sourcePath, targetPath);// 删除文件Files.delete(path);
2、目录操作
创建目录
示例代码
// 创建单级目录Files.createDirectory(path);// 创建多级目录Files.createDirectories(path);
目录遍历
示例代码
// 遍历目录try(Stream<Path>paths=Files.list(directoryPath)){paths.forEach(System.out::println);}// 递归遍历目录try(Stream<Path>paths=Files.walk(directoryPath)){paths.forEach(System.out::println);}
3、文件属性操作
获取文件属性
示例代码
// 检查文件是否存在booleanexists=Files.exists(path);// 获取文件大小longsize=Files.size(path);// 获取文件最后修改时间FileTime lastModifiedTime=Files.getLastModifiedTime(path);
设置文件属性
示例代码
// 设置文件最后修改时间Files.setLastModifiedTime(path, FileTime.fromMillis(System.currentTimeMillis()));// 设置文件权限Set<PosixFilePermission>perms=PosixFilePermissions.fromString("rwxr-x---");Files.setPosixFilePermissions(path, perms);
高级功能
1、文件查找
示例代码
// 查找特定扩展名的文件try(Stream<Path>paths=Files.find(directoryPath,Integer.MAX_VALUE,(path, attrs)->path.toString().endsWith(".txt"))){paths.forEach(System.out::println);}
2、临时文件操作
示例代码
// 创建临时文件Path tempFile=Files.createTempFile("prefix",".suffix");// 创建临时目录Path tempDir=Files.createTempDirectory("tempDir");
3、文件属性视图
示例代码
// 获取文件所有者UserPrincipal owner=Files.getOwner(path);// 获取文件存储信息FileStore store=Files.getFileStore(path);
最佳实践
1、异常处理
示例代码
try{Files.copy(sourcePath, targetPath, StandardCopyOption.REPLACE_EXISTING);}catch(IOExceptione){System.err.println("文件操作失败: "+e.getMessage());}
2、资源清理
示例代码
try(Stream<String>lines=Files.lines(path)){lines.forEach(System.out::println);}// 自动关闭流
3、性能考虑
-
对于大文件,使用缓冲流 (
Files.newBufferedReader/Files.newBufferedWriter) -
批量操作时考虑使用
Files.walk而非递归调用 - 频繁访问的属性可以缓存
与传统 I/O 的比较
| 特性 | Files 类 (NIO) | 传统 I/O (java.io) |
|---|---|---|
| 方法类型 | 静态方法 | 实例方法 |
| 路径表示 | 使用 Path 接口 | 使用 File 类 |
| 异常处理 | 统一使用 IOException | 多种异常类型 |
| 功能丰富度 | 更丰富的功能 | 基础功能 |
| 符号链接处理 | 原生支持 | 有限支持 |
| 文件属性操作 | 更全面 | 有限 |
通过
Files
类,Java 提供了更现代、更强大的文件操作 API,推荐在新项目中使用它替代传统的
java.io.File
类。